home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 85 / CD Temático 40 Febrero 2004.iso / DOS / testdisk / src / ext2fs / ext2_ext_attr.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-04-03  |  2.0 KB  |  59 lines

  1. /*
  2.   File: linux/ext2_ext_attr.h
  3.  
  4.   On-disk format of extended attributes for the ext2 filesystem.
  5.  
  6.   (C) 2000 Andreas Gruenbacher, <a.gruenbacher@computer.org>
  7. */
  8.  
  9. /* Magic value in attribute blocks */
  10. #define EXT2_EXT_ATTR_MAGIC        0xEA010000
  11.  
  12. /* Maximum number of references to one attribute block */
  13. #define EXT2_EXT_ATTR_REFCOUNT_MAX    1024
  14.  
  15. struct ext2_ext_attr_header {
  16.     __u32    h_magic;    /* magic number for identification */
  17.     __u32    h_refcount;    /* reference count */
  18.     __u32    h_blocks;    /* number of disk blocks used */
  19.     __u32    h_hash;        /* hash value of all attributes */
  20.     __u32    h_reserved[4];    /* zero right now */
  21. };
  22.  
  23. struct ext2_ext_attr_entry {
  24.     __u8    e_name_len;    /* length of name */
  25.     __u8    e_name_index;    /* index into table of names (n/i) */
  26.     __u16    e_value_offs;    /* offset in disk block of value */
  27.     __u32    e_value_block;    /* disk block attribute is stored on (n/i) */
  28.     __u32    e_value_size;    /* size of attribute value */
  29.     __u32    e_hash;        /* hash value of name and value */
  30.     char    e_name[0];    /* attribute name */
  31. };
  32.  
  33. #define EXT2_EXT_ATTR_PAD_BITS        2
  34. #define EXT2_EXT_ATTR_PAD        (1<<EXT2_EXT_ATTR_PAD_BITS)
  35. #define EXT2_EXT_ATTR_ROUND        (EXT2_EXT_ATTR_PAD-1)
  36. #define EXT2_EXT_ATTR_LEN(name_len) \
  37.     (((name_len) + EXT2_EXT_ATTR_ROUND + \
  38.     sizeof(struct ext2_ext_attr_entry)) & ~EXT2_EXT_ATTR_ROUND)
  39. #define EXT2_EXT_ATTR_NEXT(entry) \
  40.     ( (struct ext2_ext_attr_entry *)( \
  41.       (char *)(entry) + EXT2_EXT_ATTR_LEN((entry)->e_name_len)) )
  42. #define EXT2_EXT_ATTR_SIZE(size) \
  43.     (((size) + EXT2_EXT_ATTR_ROUND) & ~EXT2_EXT_ATTR_ROUND)
  44.  
  45. #ifdef __KERNEL__
  46. # ifdef CONFIG_EXT2_FS_EXT_ATTR
  47. extern int ext2_get_ext_attr(struct inode *, const char *, char *, size_t, int);
  48. extern int ext2_set_ext_attr(struct inode *, const char *, char *, size_t, int);
  49. extern void ext2_ext_attr_free_inode(struct inode *inode);
  50. extern void ext2_ext_attr_put_super(struct super_block *sb);
  51. extern int ext2_ext_attr_init(void);
  52. extern void ext2_ext_attr_done(void);
  53. # else
  54. #  define ext2_get_ext_attr NULL
  55. #  define ext2_set_ext_attr NULL
  56. # endif
  57. #endif  /* __KERNEL__ */
  58.  
  59.